package kyssion.introductionToAlgorithms.chapter_02;

import kyssion.introductionToAlgorithms.utill.ShowUtil;

public class Alorithms001_插入排序_冒泡排序 {

    public static void main(String[] args) {
        int[] arr = new int[]{
                3, 2, 3, 1, 2, 3, 4, 1
        };
        new Alorithms001_插入排序_冒泡排序().sort2(arr);
        ShowUtil.intarr(arr);
    }

    /**
     * 冒泡排序,这个方法的前冒泡法
     * 其实这个算法我们要理解一个关键的地方就是,将思想变成算法时候的方法
     * 一定要非常的理解指针所表达的意思,函数变量在运行过程中所代表意义的变化情况
     *
     * @param arr
     */
    public void sort1(int[] arr) {
        for (int a = 1; a < arr.length; a++) {
            int k = arr[a];
            int index = a - 1;
            while (index >= 0 && k < arr[index]) {
                arr[index + 1] = arr[index];
                index--;
            }
            arr[index + 1] = k;
        }
    }

    /**
     * 选择排序第二种写法,从前向后选择一个最小的数字放到当前的位置中
     * @param arr
     */
    public void sort2(int[] arr) {
        for (int a = 0; a < arr.length; a++) {
            int index = a;
            for (int b = a; b < arr.length; b++) {
                if (arr[b] < arr[a]) {
                    index=b;
                }
            }
            int c = arr[a];
            arr[a]=arr[index];
            arr[index]=c;
        }
    }
}
